package org.example.proxy4;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 *     动态代理创建流程
 *     1.创建动态代理模版类，实现InvocationHandler接口
 *     2.覆盖invoke方法
 *     3.写成员变量 -- zs
 *     4.完成invoke方法
 */
public class MyInvocationHandler implements InvocationHandler {
    Object target; // zs

    public MyInvocationHandler(Object target) {
        this.target = target;
    }
    /*
        这个方法，就是ls的送花方法
        （1）通过成员变量zs，实现核心业务
        （2）对于核心业务的增强

     */
    /**
     *
     * @param proxy -- 代理类对象 这个方法中不用
     * @param method -- zs的核心业务方法
     * @param args -- zs的核心业务方法需要使用的参数
     *
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        /*
            对象 target
            方法 method
            实参 args
         */
        System.out.println("记录日志开始");
        // zs 送花 实现核心业务
        // 如果没有返回值 o就是null值
        Object o = method.invoke(target, args);
        System.out.println("记录日志结束");
        System.out.println();

        return o;
    }
}
